#!/bin/bash
set -e

#-----------------------------------------------------
# Variables
#-----------------------------------------------------
COLOR_RED=`tput setaf 1`
COLOR_GREEN=`tput setaf 2`
COLOR_RESET=`tput sgr0`
SILENT=false

print() {
    if [[ "$SILENT" == false ]] ; then
        echo "$1"
    fi
}

#-----------------------------------------------------
# ARGUMENTS
#-----------------------------------------------------

# --allow-root
## Check and warn if running as root.
if [[ $EUID = 0 ]] ; then
  if [[ $* != *--allow-root* ]] ; then
    echo "${COLOR_RED}It is not recommended (nor necessary) to run this script as root. To do so anyway, please use '--allow-root'${COLOR_RESET}"
    exit 1
  fi
fi

# --silent
## Mutes messages by console
if [[ $* == *--silent* ]] ; then
    SILENT=true
fi

#-----------------------------------------------------
# START
#-----------------------------------------------------

# Title
print "     _             _ _       "
print "    | | ___  _ __ | (_)_ __  "
print " _  | |/ _ \| '_ \| | | '_ \ "
print "| |_| | (_) | |_) | | | | | |"
print " \___/ \___/| .__/|_|_|_| |_|"
print "            |_|"
print ""
print "Linux Installer and Updater"

#-----------------------------------------------------
# Download Joplin
#-----------------------------------------------------

# Get the latest version to download
RELEASE_VERSION=$(wget -qO - "https://api.github.com/repos/laurent22/joplin/releases/latest" | grep -Po '"tag_name": "v\K.*?(?=")')

# Check if it's in the latest version
if [[ ! -e ~/.joplin/VERSION ]] || [[ $(< ~/.joplin/VERSION) != "$RELEASE_VERSION" ]]; then

    print 'Downloading Joplin...'
    # Delete previous version (in future versions joplin.desktop shouldn't exist)
    rm -f ~/.joplin/*.AppImage ~/.local/share/applications/joplin.desktop ~/.joplin/VERSION

    # Creates the folder where the binary will be stored
    mkdir -p ~/.joplin/

    # Download the latest version
    wget -nv --show-progress -O ~/.joplin/Joplin.AppImage https://github.com/laurent22/joplin/releases/download/v$RELEASE_VERSION/Joplin-$RELEASE_VERSION.AppImage

    # Gives execution privileges
    chmod +x ~/.joplin/Joplin.AppImage

    print "${COLOR_GREEN}OK${COLOR_RESET}"

    #-----------------------------------------------------
    # Icon
    #-----------------------------------------------------

    # Download icon
    print 'Downloading icon...'
    mkdir -p ~/.local/share/icons/hicolor/512x512/apps
    wget -nv -O ~/.local/share/icons/hicolor/512x512/apps/joplin.png https://joplinapp.org/images/Icon512.png
    print "${COLOR_GREEN}OK${COLOR_RESET}"

    # Detect desktop environment
    if [ "$XDG_CURRENT_DESKTOP" = "" ]
    then
      DESKTOP=$(echo "$XDG_DATA_DIRS" | sed 's/.*\(xfce\|kde\|gnome\).*/\1/')
    else
      DESKTOP=$XDG_CURRENT_DESKTOP
    fi
    DESKTOP=${DESKTOP,,}  # convert to lower case

    # Create icon for Gnome
    echo 'Create Desktop icon.'
    if [[ $DESKTOP =~ .*gnome.*|.*kde.*|.*xfce.*|.*mate.*|.*lxqt.*|.*unity.*|.*x-cinnamon.*|.*deepin.* ]]
    then
       : "${TMPDIR:=/tmp}"
       # This command extracts to squashfs-root by default and can't be changed...
       # So we run it in the tmp directory and clean up after ourselves
       (cd $TMPDIR && ~/.joplin/Joplin.AppImage --appimage-extract joplin.desktop &> /dev/null)
       APPIMAGE_VERSION=$(grep "^X-AppImage-Version=" $TMPDIR/squashfs-root/joplin.desktop | head -n 1 | cut -d "=" -f 2)
       rm -rf $TMPDIR/squashfs-root
       # Only delete the desktop file if it will be replaced
       rm -f ~/.local/share/applications/appimagekit-joplin.desktop

       # On some systems this directory doesn't exist by default
       mkdir -p ~/.local/share/applications
       echo -e "[Desktop Entry]\nEncoding=UTF-8\nName=Joplin\nComment=Joplin for Desktop\nExec=/home/$USER/.joplin/Joplin.AppImage\nIcon=joplin\nStartupWMClass=Joplin\nType=Application\nCategories=Office;\n#$APPIMAGE_VERSION" >> ~/.local/share/applications/appimagekit-joplin.desktop
       # Update application icons
       [[ `command -v update-desktop-database` ]] && update-desktop-database ~/.local/share/applications
       print "${COLOR_GREEN}OK${COLOR_RESET}"
    else
       print "${COLOR_RED}NOT DONE${COLOR_RESET}"
    fi

    #-----------------------------------------------------
    # Finish
    #-----------------------------------------------------
    # Informs the user that it has been installed and cleans variables
    print "${COLOR_GREEN}Joplin version${COLOR_RESET}" $RELEASE_VERSION "${COLOR_GREEN}installed.${COLOR_RESET}"

    # Add version
    echo $RELEASE_VERSION > ~/.joplin/VERSION
else
    print "${COLOR_GREEN}You already have the latest version${COLOR_RESET}" $version "${COLOR_GREEN}installed.${COLOR_RESET}"
fi

# Goodbye
print 'Bye!'
